home *** CD-ROM | disk | FTP | other *** search
- I thought this little program might be relevent to the recent inertia /
- gravity stuff on the list recently.
-
- Dom
-
- ----Cut here----
-
- ' Bouncing Balls
- ' All collisions are calculated (fairly) accurately
- ' By Dominic Ramsey
- '
- NB=15
- Dim X(NB),Y(NB),DX(NB),DY(NB)
- Global X(),Y(),DX(),DY(),NB
- '
- INIT
- BALLS
- '
- Procedure INIT
- Screen Open 0,640,512,2,Hires+Laced : Flash Off : Cls 0
- Hide On
- Ellipse 6,6,3,3
- Paint 6,6
- Get Bob 1,3,3 To 10,10
- Palette 0,$FF0,$F0F,$FF,
- Cls 0
- Double Buffer : Autoback 0 : Update Off
- '
- For I=1 To NB
- X(I)=Rnd(639000) : Y(I)=Rnd(400000)
- Bob I,X(I)/1000,Y(I)/1000,1
- Next I
- Randomize Timer
- End Proc
- Procedure BALLS
- Repeat
- For I=1 To NB
- '
- If Abs(DX(I))<1000 and Abs(DY(I))<1000
- DX(I)=Rnd(60000)-20000
- DY(I)=Rnd(60000)-30000
- End If
- Add DY(I),600
- Add X(I),DX(I)
- Add Y(I),DY(I)
- '
- DX(I)=DX(I)/1.01
- DY(I)=DY(I)/1.01
- '
- If X(I)<0 or X(I)>639000
- DX(I)=-DX(I)
- Add X(I),DX(I)
- End If
- '
- If Y(I)<0 or Y(I)>500000
- DY(I)=-DY(I)
- If Y(I)<0
- Y(I)=0
- Else
- Y(I)=500000
- End If
- End If
- '
- Bob I,X(I)/1000,Y(I)/1000,
- '
- If Bob Col(I)
- J=Col(-1)
- If X(J)=X(I)
- Inc X(J)
- End If
- '
- W#=Atan((Y(I)-Y(J))/(X(J)-X(I)))
- S#=Sin(W#)
- C#=Cos(W#)
- SS#=S#*S#
- CC#=C#*C#
- CS#=C#*S#
- DXT1=DX(I)*SS#+DX(J)*CC#+(DY(I)-DY(J))*CS#
- DYT1=DY(I)*CC#+DY(J)*SS#+(DX(I)-DX(J))*CS#
- DXT2=DX(J)*SS#+DX(I)*CC#+(DY(J)-DY(I))*CS#
- DY(J)=(DY(J)*CC#+DY(I)*SS#+(DX(J)-DX(I))*CS#)
- DX(I)=DXT1
- DY(I)=DYT1
- DX(J)=DXT2
- Add X(J),DX(J)
- Add Y(J),DY(J)
- End If
- '
- Next I
- Update
- Wait Vbl
- Until Mouse Key>0
- '
- Erase 1
- End Proc
-
-
- --
- Dominic Ramsey email: dom@dynamo.demon.co.uk
- http://www.gate.net/user/play/people/dramsey.html
-
-